from flask import Flask, render_template, request, jsonify, g
from exts import db
import config
from flask_migrate import Migrate
from models import User
import random

app = Flask(__name__)

# 绑定配置文件
app.config.from_object(config)

# 初始化
db.init_app(app)
migrate = Migrate(app, db)


# 使用get方法，生成一个路由route为sign_in，渲染sign_in.html模版的函数
@app.route('/sign_in', methods=['GET'])
def sign_in():
    return render_template('sign_in.html')


# 使用get方法，生成一个路由route为user，接受变量num参数，将接受的到的num值存储到数据库中，成功返回success为True
@app.route('/user', methods=['GET'])
def user():
    num = request.args.get('num')
    # 将接收到的num值存储到数据库中
    user = User(num=num)
    db.session.add(user)
    db.session.commit()
    return jsonify({'success': True})


# 抽奖
# 使用get方法，生成一个路由route为lottery_template的函数，渲染模版lottery.html
@app.route('/lottery_template', methods=['GET'])
def lottery_template():
    return render_template('lottery.html')

"""
1.生成before_request钩子函数
2.使用with_entities从数据库User模型中获取num列的值
3.使用for循环转，去每个元素的第0个
4.将获取到的值转化为列表，存储到g对象中属性为为converted_data
"""
@app.before_request
def before_request():
    # 获取数据库中所有User模型的num值
    data = db.session.query(User.num).all()
    # 将获取到的值转化为列表，存储到g对象中属性为converted_data
    g.converted_data = [i[0] for i in data]

# 使用get方法，生成一个路由route为/numbers/的函数，返回值中key为numbers,值为g.converted_data
@app.route('/numbers/', methods=['GET'])
def numbers():
    return jsonify({'numbers': g.converted_data})

"""
使用get方法，生成一个路由route为/lottery/的函数
随机从g.converted_data中选取一个值并返回该值key为number
"""
@app.route('/lottery/', methods=['GET'])
def lottery():
    # 随机从g.converted_data中选取一个值并返回该值key为number
    num = random.choice(g.converted_data)
    # 从数据库中num列查询到值为number的值，并删除提交到数据库
    db.session.delete(User.query.filter_by(num=num).first())
    db.session.commit()
    return jsonify({'number': num})


if __name__ == '__main__':
    app.run()
